package com.atguigu02.fileStream;

import org.junit.Test;

import java.io.*;

public class FileReaderWriter {
//异常使用throws不合适，不能确保一定能把流关闭
    @Test
    public void t1() throws IOException {
        //1.创建File类的对象，对应着hello.txt文件
        File file=new File("hello.txt");
    //2.创建输入型的字符流，用于读取数据
        FileReader fileReader = new FileReader(file);
        //3.读取数据，并显示在控制台上
        int data=fileReader.read();
        while(data!=-1){
            System.out.print((char) data);
            data=fileReader.read();
        }
    //4．流资源的关闭操作（必须要关闭，否则会内存泄漏>
    fileReader.close();

    }
    @Test
    public void t2(){
        FileReader fileReader=null;
        try {
            //1.创建File类的对象，对应着hello.txt文件
            File file=new File("hello.txt");
            //2.创建输入型的字符流，用于读取数据
             fileReader = new FileReader(file);
            //3.读取数据，并显示在控制台上
            int data=fileReader.read();
            while(data!=-1){
                System.out.print((char) data);
                data=fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //每次读取多个字符，减少与磁盘交互次数
    @Test
    public void t3(){
        FileReader fileReader=null;
        try {
            //1.创建File类的对象，对应着hello.txt文件
            File file=new File("hello.txt");
            //2.创建输入型的字符流，用于读取数据
            fileReader = new FileReader(file);
            //3.读取数据，并显示在控制台上
            char[] buffer = new char[5];
            int length=fileReader.read(buffer);
            while(length!=-1){
               for(int i=0;i<length;++i){
                   System.out.print(buffer[i]);
               }
           }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //将内存的数据写入到具体文件中
    @Test
    public void t4() throws IOException {
        //1．创建File类的对象，指明要写出的文件的名称
        File file = new File( "info.txt" );
        //2．创建输出流
        FileWriter fw = new FileWriter(file);
        //3．写出的具体过程
        //输出的方法: write(String str) / write(char[ ] cdata)
        fw.write( "I love u! \n");
        fw.write( "You love him ! \n" );
        fw .write("太惨了...");
        //4．关闭资源
        fw.close();

    }

    //*需求:复制一份hello.txt文件，命名为hello_copy.txt
     @Test
    public void t5() throws IOException {
        File file1=new File("hello.txt");
        File file2=new File("hello_copy.txt");

         FileReader fileReader = new FileReader(file1);
         FileWriter fileWriter=new FileWriter(file2);

         char[] buffer=new char[5];
         int len;
         while((len=fileReader.read(buffer))!=-1){     //read()的返回值为整数，若不是-1则继续
             fileWriter.write(buffer,0,len);
         }

         fileReader.close();
         fileWriter.close();

     }
}
